Код Python для запроса DynamoDB работает на v3.6, но не работает на python 2.7 - PullRequest
1 голос
/ 30 марта 2019

У меня есть запрос DynamoDB с каркасом boto3, который работает на моей локальной машине с Python 3.6, но не на моем сервере с Python 2.7.

Рабочий код на моей локальной машине:

dyndb = boto3.resource('dynamodb')
table = dyndb.Table('XXXXXXX')

response = table.query(
      IndexName = "XXX-XXX-index",
      ProjectionExpression = "AssessID,SNo,Details,Status,OTP",
      KeyConditionExpression = Key('OTP').eq(otp))

Код, выполняющийся на сервере ...

    global user_otp

         dyndb = boto3.resource('dynamodb')
         table = dyndb.Table('XXXXXX')

         otp = int(user_otp)

         print("converting string otp to int otp") # it is printed on console
         response = table.query(
                 IndexName = "XXX-XXX-index",
                 ProjectionExpression = "AssessID,SNo,Details,Status,OTP",
                 KeyConditionExpression = Key('OTP').eq(otp) & Key('SNo').between(1,5))

         print ("response code is executing file") # it is not printed on console

Когда я печатаю вывод, отображается первый отпечаток, но не второй отпечаток после запроса таблицы.

Я делаю этот запрос по глобальному индексу с OTP в качестве ключа раздела и SNo в качестве ключа сортировки.Я получаю результаты на своем локальном компьютере только с ключом раздела, но не на моем сервере, даже используя ключ разделения и ключ сортировки.

DynamoDB не вызывает никаких исключений.вместо этого я получаю исключение торнадо.

control coming to process and response function
user otp mentioned is  3086and its type <type 'int'>
converting string otp to int otp

ERROR:tornado.application:Exception in callback <functools.partial object at 0x7f33b6ce7890>
Traceback (most recent call last):
  File "/usr/lib64/python2.7/site-packages/tornado/ioloop.py", line 758, in _run_callback
    ret = callback()
  File "/usr/lib64/python2.7/site-packages/tornado/stack_context.py", line 300, in null_wrapper
    return fn(*args, **kwargs)
  File "/usr/lib64/python2.7/site-packages/tornado/ioloop.py", line 779, in _discard_future_result
    future.result()
  File "/usr/lib64/python2.7/site-packages/tornado/concurrent.py", line 261, in result
    raise_exc_info(self._exc_info)
  File "/usr/lib64/python2.7/site-packages/tornado/gen.py", line 1141, in run
    yielded = self.gen.throw(*exc_info)
  File "/usr/lib64/python2.7/site-packages/tornado/websocket.py", line 888, in _receive_frame_loop
    yield self._receive_frame()
  File "/usr/lib64/python2.7/site-packages/tornado/gen.py", line 1133, in run
    value = future.result()
  File "/usr/lib64/python2.7/site-packages/tornado/concurrent.py", line 261, in result
    raise_exc_info(self._exc_info)
  File "/usr/lib64/python2.7/site-packages/tornado/gen.py", line 1147, in run
    yielded = self.gen.send(value)
  File "/usr/lib64/python2.7/site-packages/tornado/websocket.py", line 975, in _receive_frame
    handled_future = self._handle_message(opcode, data)
  File "/usr/lib64/python2.7/site-packages/tornado/websocket.py", line 1000, in _handle_message
    return self._run_callback(self.handler.on_message, decoded)
  File "/usr/lib64/python2.7/site-packages/tornado/websocket.py", line 548, in _run_callback
    self.handler.log_exception(*sys.exc_info())
AttributeError: 'WebSocketClientConnection' object has no attribute 'log_exception'

1 Ответ

0 голосов
/ 31 марта 2019

Я думаю, что «без атрибута log_exception» была ошибка в Tornado 5, которая была исправлена ​​в Tornado 6. Однако Tornado 6 поддерживает только Python 3, поэтому в Python 2 вы получаете более старую версию.

Здесь также есть другая ошибка, но вы не можете увидеть, что это такое, потому что обработка ошибок в Python 2 не так хороша, как в Python 3. И ошибка, по-видимому, не возникает в Python 3. Если вам необходимо продолжить поддерживать Python 2, попробуйте добавить блок try/except вокруг тела вашего on_message обратного вызова (или используйте интерфейс read_message вместо on_message обратный звонок).

...